#ifndef __OLORIN_CAMERA__
#define __OLORIN_CAMERA__

#include <DLL.hpp>
#include <Object.hpp>

namespace Olorin
{
	class DLLAPI Camera : public Object
	//class Camera : public Object
	{
	private:
		// View parameters
		Vector3 up;
		Vector3 lookAt;

		// Projection parameters
		float fieldOfView;
		float aspectRatio;
		float nearPlane;
		float farPlane;
	public:
		Camera();

		void setUp(const Vector3& up);
		void setLookAt(const Vector3& lookAt);
		void setFieldOfView(const float& fieldOfView);
		void setAspectRatio(const float& aspectRatio);
		void setNearPlane(const float& nearPlane);
		void setFarPlane(const float& farPlane);

		const Vector3& getUp() const;
		const Vector3& getLookAt() const;
		const float& getFieldOfView() const;
		const float& getAspectRatio() const;
		const float& getNearPlane() const;
		const float& getFarPlane() const;

		const Vector3 getForward() const;
		const Matrix4 getView() const;
		const Matrix4 getProjection() const;
	};
}

#endif